package net.xju3_4.service;

import net.xju3_4.common.utils.PageInfo;
import net.xju3_4.entity.OrderEntity;

import java.util.Map;

/**
 * 租车服务接口
 * 独立的租车业务服务接口
 */
public interface RentalService {
    
    /**
     * 创建租车订单
     * @param rentalData 租车数据
     * @return 创建的订单实体
     */
    OrderEntity createRental(Map<String, Object> rentalData);
    
    /**
     * 获取用户的租车记录（分页）
     * @param userId 用户ID
     * @param status 订单状态（可选）
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 分页信息
     */
    PageInfo<OrderEntity> getUserRentals(String userId, String status, int pageNum, int pageSize);
    
    /**
     * 获取租车订单详情
     * @param rentalId 租车订单ID
     * @param userId 用户ID（用于权限验证）
     * @return 订单详情
     */
    OrderEntity getRentalDetail(int rentalId, String userId);
    
    /**
     * 取消租车订单
     * @param rentalId 租车订单ID
     * @param userId 用户ID
     * @param reason 取消原因
     * @return 是否成功
     */
    boolean cancelRental(int rentalId, String userId, String reason);
    
    /**
     * 更新租车订单状态
     * @param rentalId 租车订单ID
     * @param newStatus 新状态
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean updateRentalStatus(int rentalId, Integer newStatus, String userId);
    
    /**
     * 计算租车费用
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param dailyRent 日租金
     * @return 费用信息
     */
    Map<String, Object> calculateRentalCost(String startDate, String endDate, double dailyRent);
    
    /**
     * 检查车辆在指定时间段是否可租
     * @param carId 车辆ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 是否可租
     */
    boolean isCarAvailable(String carId, String startDate, String endDate);
    
    /**
     * 获取订单状态描述
     * @param status 状态代码
     * @return 状态描述
     */
    String getStatusDescription(Integer status);
}
